/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ajustes.db;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Jessica Ordoñez
 */
public class Conexion {

    private static String user = "PRG";
    private static String pass = "693194986";

    /**
     * @return the user
     */
    public static String getUser() {
        return user;
    }

    /**
     * @return the pass
     */
    public static String getPass() {
        return pass;
    }
    private Connection cnx;
    private String ip;
    private String port;
    private String db;
    private String url;

    /**
     * Crea una instancia de Conexion
     *
     * @param ip es la direccion ip de la base de datos.
     * @param port es numero de puerto de la base de datos.
     * @param db es el nombre de la base de datos.
     */
    public Conexion(String ip, String port, String db) {
        this.ip = ip;
        this.port = port;
        this.db = db;
        //es el url para conexion con Sybase
        this.url = "jdbc:sybase:Tds:" + ip + ":" + port + "?ServiceName=" + db;
    }

    /**
     * Crea una conexion con la base datos.
     *
     * @throws SQLException
     */
    public void connect() throws SQLException {
        close();
        this.cnx = DriverManager.getConnection(getUrl(), Conexion.getUser(), Conexion.getPass());
    }

    /**
     * Cierra la conexion con la base da datos.
     */
    public void close() {
        try {
            if (cnx != null) {
                cnx.close();
            }
        } catch (SQLException ex) {
        }
    }

    /**
     * Indica si la conexion a la base de datos esta bien.
     *
     * @return true si la conexion es valida, sino devuelve false.
     */
    public boolean isOk() {
        boolean retVal = false;

        if (cnx == null) {
            return retVal;
        }
        try {
            retVal = cnx.isValid(2);
        } catch (SQLException ex) {
        }

        return retVal;
    }

    /**
     *
     * @param userName
     * @return
     * @throws SQLException
     */
    public Usuario getUsuario(String userName) throws SQLException {

        //Controla la conexion a la base de datos
        if (cnx == null || cnx.isClosed()) {
            throw new SQLException("Conexion no establecida con la base de datos");
        }

        Usuario retVal = null;

        PreparedStatement stmt;

        stmt = getCnx().prepareStatement("SELECT UsuarioId, Nombre, Clave FROM USUARIOS WHERE Nombre = ?");
        stmt.setString(1, userName);

        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            retVal = new Usuario(rs.getInt(1), rs.getString(2), rs.getString(3));
        }

        return retVal;

    }

    static {
        try {
            Class.forName("com.sybase.jdbc4.jdbc.SybDataSource");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ex);
            System.exit(1);
        }
    }

    /**
     * Devuelva la conexion con la base de datos.
     *
     * @return the cnx
     */
    public Connection getCnx() {
        return cnx;
    }

    /**
     * Devuelve la direccion ip.
     *
     * @return the ip
     */
    public String getIp() {
        return ip;
    }

    /**
     * Devuelve el numero de puerto.
     *
     * @return the port
     */
    public String getPort() {
        return port;
    }

    /**
     * Devuelve el nombre de la base de datos.
     *
     * @return the db
     */
    public String getDb() {
        return db;
    }

    /**
     * Devuelve el URL de conexion a la base de datos.
     *
     * @return the url
     */
    public String getUrl() {
        return url;
    }
}
